# -*- coding: utf-8 -*-
"""
date: Wed Jan  2 15:35:22 2019
python: Anaconda 3.6.5
author: kanade
email: kanade@blisst.cn
"""
import numpy as np
import sklearn.linear_model as lm
import sklearn.metrics as sm
import matplotlib.pyplot as mp


# 采集数据
# x(输入)需要是一个一行一样本 一列一特征的二维数组，因为线性回归不一定只有一个x，
# 通用线性回归函数为y = w0 + w1x1 + w2x2 + ... + wnxn
x = np.array([[0.5], [0.6], [0.8], [1.1], [1.4]])
y = np.array([5.0, 5.5, 6.0, 6.8, 7.0])
# 创建线性回归模型
model = lm.LinearRegression()  
# 训练模型
model.fit(x, y)
# 根据输入预测输出
pred_y = model.predict(x)
# 打印每个样本的实际输出和预测输出
for true, pred in zip(y, pred_y):
    print(true, '->', pred)
# 平均绝对值误差：1/mΣ|实际输出-预测输出|
print('平均值误差：%.4f' % sm.mean_absolute_error(y, pred_y))
# 平均平方误差：SQRT(1/mΣ(实际输出-预测输出)^2)
print('平均值平方误差：%.4f' % sm.mean_squared_error(y, pred_y))
# 中位绝对值误差：MEDIAN(|实际输出-预测输出|)
print('中位数误差：%.4f' % sm.median_absolute_error(y, pred_y))
# R2得分，将[0,∞)区间的误差映射到[1,0)区间的分值,值越大越好
print('R2得分：%.4f' % sm.r2_score(y, pred_y))

mp.scatter(x, y, c='dodgerblue', alpha=0.75, s=60)

mp.plot(x.T[0], pred_y, c='orangered')

mp.show()
